library(tidyverse)
library(sf)
library(geobr)
library(plotly)
library(leaflet)
library(viridis)
# Dados Temperatura

temp = read.csv("C:/Users/rodri/OneDrive - Insper/ConsumoEnergiaRJ/Temperaturas - RJ/TODOS OS ANOS.CSV", 
              fileEncoding = 'Latin1', sep = ";")

# Renomear as colunas do dataset
names(temp) <- c(
  "data",
  "hora_utc",
  "precipitacao_mm",
  "pressao_estacao_mb",
  "pressao_max_mb",
  "pressao_min_mb",
  "radiacao_kj_m2",
  "temp_ar_c",
  "temp_orvalho_c",
  "temp_max_c",
  "temp_min_c",
  "temp_orvalho_max_c",
  "temp_orvalho_min_c",
  "umid_rel_max",
  "umid_rel_min",
  "umid_rel",
  "vento_direcao_graus",
  "vento_rajada_max_ms",
  "vento_vel_ms"
)

# Visualizar os novos nomes
str(temp)
## 'data.frame':    105192 obs. of  19 variables:
##  $ data               : chr  "01/01/2009" "01/01/2009" "01/01/2009" "01/01/2009" ...
##  $ hora_utc           : chr  "00:00" "01:00" "02:00" "03:00" ...
##  $ precipitacao_mm    : chr  "0" "0" "0" "0" ...
##  $ pressao_estacao_mb : chr  "1010,2" "1009,7" "1009,4" "1008,4" ...
##  $ pressao_max_mb     : chr  "1010,3" "1010,3" "1009,7" "1009,4" ...
##  $ pressao_min_mb     : chr  "1009,5" "1009,7" "1009,1" "1008,4" ...
##  $ radiacao_kj_m2     : chr  "0" "0" "0" "0" ...
##  $ temp_ar_c          : chr  "25,6" "25,2" "25,5" "24,6" ...
##  $ temp_orvalho_c     : chr  "23,9" "22,6" "20,7" "21,2" ...
##  $ temp_max_c         : chr  "25,7" "25,6" "25,6" "25,5" ...
##  $ temp_min_c         : chr  "25,5" "25,2" "25,2" "24,6" ...
##  $ temp_orvalho_max_c : chr  "24,1" "23,9" "22,5" "21,2" ...
##  $ temp_orvalho_min_c : chr  "23,9" "22,6" "20,5" "20,6" ...
##  $ umid_rel_max       : int  91 91 85 81 88 96 96 95 95 96 ...
##  $ umid_rel_min       : int  90 85 74 75 81 88 93 91 94 94 ...
##  $ umid_rel           : int  91 85 75 81 88 96 93 95 94 96 ...
##  $ vento_direcao_graus: int  263 265 260 28 67 356 228 305 272 233 ...
##  $ vento_rajada_max_ms: chr  "6,3" "7" "6,1" "4,4" ...
##  $ vento_vel_ms       : chr  "3,8" "1,6" "2,4" "1,1" ...
# Definir as colunas que devem ser convertidas para o formato numérico, tratando NA
cols_to_numeric <- c(
  "precipitacao_mm",         # Precipitação em milímetros
  "pressao_estacao_mb",      # Pressão atmosférica na estação em milibares
  "pressao_max_mb",          # Pressão máxima em milibares
  "pressao_min_mb",          # Pressão mínima em milibares
  "radiacao_kj_m2",          # Radiação em kilojoules por metro quadrado
  "temp_ar_c",               # Temperatura do ar em graus Celsius
  "temp_orvalho_c",          # Temperatura do ponto de orvalho em graus Celsius
  "temp_max_c",              # Temperatura máxima em graus Celsius
  "temp_min_c",              # Temperatura mínima em graus Celsius
  "temp_orvalho_max_c",      # Temperatura máxima do ponto de orvalho em graus Celsius
  "temp_orvalho_min_c",      # Temperatura mínima do ponto de orvalho em graus Celsius
  "umid_rel_max",            # Umidade relativa máxima em porcentagem
  "umid_rel_min",            # Umidade relativa mínima em porcentagem
  "umid_rel",                # Umidade relativa média em porcentagem
  "vento_direcao_graus",     # Direção do vento em graus
  "vento_rajada_max_ms",     # Velocidade máxima de rajada de vento em metros por segundo
  "vento_vel_ms"             # Velocidade média do vento em metros por segundo
)

# Substituir vírgulas por pontos nos valores das colunas selecionadas e convertê-los para numérico
temp[cols_to_numeric] <- lapply(temp[cols_to_numeric], function(col) {
  as.numeric(gsub(",", ".", col)) # Substituir "," por "." e converter para numérico
})

# Agrupar os dados por data e calcular a média da temperatura máxima, ignorando valores NA
temp1 <- temp %>%
  group_by(data) %>%                            # Agrupar os dados por data
  summarise(temp_max_c = mean(temp_max_c, na.rm = TRUE)) %>%  # Calcular a média da temperatura máxima
  mutate(data = as.Date(data, format = "%d/%m/%Y")) %>%      # Converter a coluna 'data' para o formato de data
  arrange((data))                                            # Ordenar os dados pela data

# Criar um objeto com os 10 dias de maior temperatura máxima
top_10_dias_maior_temp <- temp1 %>%
  slice_max(temp_max_c, n = 10) # Selecionar os 10 maiores valores de temperatura máxima

top_10_dias_maior_temp # Visualizar o objeto com os 10 dias de maior temperatura máxima
## # A tibble: 10 × 2
##    data       temp_max_c
##    <date>          <dbl>
##  1 2020-10-02       36.6
##  2 2011-01-28       35.9
##  3 2011-02-09       35.7
##  4 2011-02-06       35.0
##  5 2011-02-22       34.9
##  6 2011-02-12       34.4
##  7 2011-02-07       34.3
##  8 2011-02-14       34.2
##  9 2011-02-10       34.2
## 10 2011-02-21       34.1
# Criar um objeto com os 10 dias de menor temperatura máxima
top_10_dias_menor_temp <- temp1 %>%
  slice_min(temp_max_c, n = 10) # Selecionar os 10 menores valores de temperatura máxima

top_10_dias_menor_temp # Visualizar o objeto com os 10 dias de menor temperatura máxima
## # A tibble: 10 × 2
##    data       temp_max_c
##    <date>          <dbl>
##  1 2011-07-09       15.0
##  2 2013-07-25       15.2
##  3 2013-07-24       15.3
##  4 2009-06-04       16.5
##  5 2016-06-13       16.6
##  6 2014-08-14       16.7
##  7 2017-07-19       16.9
##  8 2019-08-04       17.0
##  9 2020-08-22       17.0
## 10 2011-07-05       17.1
# Criando um gráfico interativo
plot_ly(
  data = temp1, 
  x = ~data, 
  y = ~temp_max_c, 
  type = 'scatter', 
  mode = 'lines',
  line = list(shape = 'linear', color = 'black', width = 0.5),  # Linha azul e espessura ajustada
  hoverinfo = 'text',
  text = ~paste('Data:', format(data, "%d/%m/%Y"), '<br>Temp Máxima (°C):', round(temp_max_c, 1))
) 
# Agrupamento por mês e cálculo da temperatura máxima média
temp1 <- temp %>%
  mutate(mes = format(as.Date(data, format = "%d/%m/%Y"), "%Y-%m")) %>%  # Extrair o mês e o ano da coluna 'data'
  group_by(mes) %>%                                                      # Agrupar os dados por mês
  summarise(temp_max_c = mean(temp_max_c, na.rm = TRUE)) %>%             # Calcular a média da temperatura máxima por mês
  mutate(mes = as.Date(paste0(mes, "-01"))) %>%                          # Converter o mês de volta para o formato de data (primeiro dia do mês)
  arrange(mes)                                                           # Ordenar os dados pelo mês

# Criar um objeto com os 10 meses de maior temperatura máxima média
top_10_mes_maior_temp <- temp1 %>%
  slice_max(temp_max_c, n = 10) # Selecionar os 10 maiores valores de temperatura máxima média por mês

top_10_mes_maior_temp # Visualizar o objeto com os 10 meses de maior temperatura máxima média
## # A tibble: 10 × 2
##    mes        temp_max_c
##    <date>          <dbl>
##  1 2011-02-01       32.2
##  2 2019-01-01       30.3
##  3 2014-02-01       30.0
##  4 2015-01-01       29.8
##  5 2010-02-01       29.8
##  6 2014-01-01       29.7
##  7 2012-12-01       29.3
##  8 2011-01-01       29.1
##  9 2017-02-01       29.0
## 10 2017-01-01       29.0
# Criar um objeto com os 10 meses de menor temperatura máxima média
top_10_mes_menor_temp <- temp1 %>%
  slice_min(temp_max_c, n = 10) # Selecionar os 10 menores valores de temperatura máxima média por mês

top_10_mes_menor_temp # Visualizar o objeto com os 10 meses de menor temperatura máxima média
## # A tibble: 10 × 2
##    mes        temp_max_c
##    <date>          <dbl>
##  1 2016-06-01       20.2
##  2 2010-06-01       20.2
##  3 2011-06-01       20.3
##  4 2013-07-01       20.4
##  5 2011-07-01       20.5
##  6 2009-06-01       20.5
##  7 2017-07-01       20.6
##  8 2017-08-01       20.9
##  9 2014-07-01       21.0
## 10 2009-07-01       21.1
# Criando o gráfico interativo por mês
plot_ly(
  data = temp1, 
  x = ~mes, 
  y = ~temp_max_c, 
  type = 'scatter', 
  mode = 'lines+markers',
  line = list(shape = 'linear', color = 'blue', width = 2),  # Linha azul e espessura ajustada
  marker = list(size = 6, color = 'red'),  # Marcadores vermelhos maiores
  hoverinfo = 'text',
  text = ~paste('Mês:', format(mes, "%b %Y"), '<br>Temp Máxima (°C):', round(temp_max_c, 1))
) %>%
  layout(
    title = 'Evolução da Temperatura Máxima Média Mensal',
    xaxis = list(
      title = 'Mês',
      tickformat = "%b %Y",  # Formato dos ticks no eixo X
      rangeslider = list(visible = TRUE)  # Adiciona slider para facilitar o zoom
    ),
    yaxis = list(title = 'Temperatura Máxima (°C)'),
    hovermode = 'x unified'  # Mostra valores em uma linha vertical ao passar o mouse
  )
# Análise de chuva

preciptacao <- temp %>%
  group_by(data) %>%                                                   # Agrupar os dados por data
  summarise(precipitacao_mm = mean(precipitacao_mm, na.rm = TRUE)) %>% # Calcular a média da precipitação (mm) por dia, ignorando valores NA
  mutate(data = as.Date(data, format = "%d/%m/%Y")) %>%                # Converter a coluna 'data' para o formato de data
  arrange((data))                                                      # Ordenar os dados por data em ordem crescente

# Criar um objeto com os 10 dias de maior precipitação média
top_10_dias_maior_chuva <- preciptacao %>%
  slice_max(precipitacao_mm, n = 10) # Selecionar os 10 maiores valores de precipitação média por dia

top_10_dias_maior_chuva # Visualizar o objeto com os 10 dias de maior precipitação média
## # A tibble: 10 × 2
##    data       precipitacao_mm
##    <date>               <dbl>
##  1 2020-03-01            8.42
##  2 2009-12-31            6.47
##  3 2019-04-09            5.46
##  4 2017-11-20            5.28
##  5 2011-04-26            4.72
##  6 2020-02-03            4.67
##  7 2011-12-19            4.08
##  8 2015-02-15            3.96
##  9 2009-05-29            3.82
## 10 2009-12-30            3.75
# Criar um objeto com os 10 dias de menor precipitação média
top_10_dias_menor_chuva <- preciptacao %>%
  slice_min(precipitacao_mm, n = 10) # Selecionar os 10 menores valores de precipitação média por dia

top_10_dias_menor_chuva # Visualizar o objeto com os 10 dias de menor precipitação média
## # A tibble: 2,595 × 2
##    data       precipitacao_mm
##    <date>               <dbl>
##  1 2009-01-02               0
##  2 2009-01-13               0
##  3 2009-01-14               0
##  4 2009-01-15               0
##  5 2009-01-17               0
##  6 2009-01-19               0
##  7 2009-01-21               0
##  8 2009-02-01               0
##  9 2009-02-04               0
## 10 2009-02-05               0
## # ℹ 2,585 more rows
# Leitura dos dados de energia

energia <- read_sf("C:/Users/rodri/OneDrive - Insper/ConsumoEnergiaRJ/DadosCompletos.csv") # Carregar o arquivo CSV com os dados de energia

energia <- energia %>% 
  filter(BAIRRO != "RIO DE JANEIRO") # Filtrar os dados para excluir o bairro 'RIO DE JANEIRO'

energia$total_consumo_kwh <- as.numeric(energia$total_consumo_kwh) # Converter a coluna de consumo total de energia para numérico

# Converter MES_REFERENCIA para o formato de data
energia <- energia %>%
  mutate(MES_REFERENCIA = as.Date(MES_REFERENCIA, format = "%d/%m/%Y")) # Converter a coluna 'MES_REFERENCIA' para o formato de data

# Agrupar os dados por bairro e mês, somar o consumo total de energia
energia <- energia %>%
  group_by(BAIRRO, MES_REFERENCIA) %>%
  summarise(total_consumo_kwh = sum(total_consumo_kwh, na.rm = TRUE)) %>%  # Somar o consumo de energia por bairro e mês
  mutate(total_consumo_kwh = as.integer(total_consumo_kwh)) # Garantir que o consumo total seja tratado como inteiro

# Criar um gráfico interativo da série temporal de consumo de energia
plot_ly(data = energia, 
        x = ~MES_REFERENCIA, 
        y = ~total_consumo_kwh, 
        type = 'scatter', 
        mode = 'lines+markers', 
        color = ~BAIRRO,  # Diferenciar as linhas por bairro
        text = ~paste('Bairro:', BAIRRO, '<br>Total Consumption (kWh):', total_consumo_kwh, '<br>Month:', MES_REFERENCIA),
        hoverinfo = 'text',  # Esta linha garante que somente as informações de texto sejam mostradas no hover
        name = ~BAIRRO,
        line = list(shape = 'linear')) %>%
  layout(title = 'Monthly Energy Consumption Over Time', # Título do gráfico
         xaxis = list(title = 'Month'), # Título do eixo X
         yaxis = list(title = 'Total Consumption (kWh)'), # Título do eixo Y
         hovermode = 'closest') # Define o modo de hover para mostrar os dados do ponto mais próximo
# Resumo do consumo total de energia por bairro
energia_summary <- energia %>%
  group_by(BAIRRO) %>%
  summarise(total_consumo_kwh = sum(total_consumo_kwh, na.rm = TRUE)) %>%
  ungroup() # Resumo do consumo total de energia por bairro

# Criar um objeto com os 10 bairros de maior consumo de energia
top_10_bairros <- energia_summary %>%
  slice_max(total_consumo_kwh, n = 10) # Selecionar os 10 bairros com maior consumo de energia

# Criar um objeto com os 10 bairros de menor consumo de energia
bottom_10_bairros <- energia_summary %>%
  slice_min(total_consumo_kwh, n = 10) # Selecionar os 10 bairros com menor consumo de energia

# Visualizar os resultados
print(top_10_bairros) # Exibir os 10 bairros com maior consumo
## # A tibble: 10 × 2
##    BAIRRO           total_consumo_kwh
##    <chr>                        <dbl>
##  1 "CENTRO(RJ)"           16342629591
##  2 "SAO CRISTOVAO "        2630997483
##  3 "FREGUESIA "            2150135102
##  4 "CIDADE NOVA "          1607266924
##  5 "RIO COMPRIDO"          1247919182
##  6 "BENFICA "               773436750
##  7 "GAMBOA"                 653889949
##  8 "SANTO CRISTO"           576404203
##  9 "CAJU "                  524643209
## 10 "SANTA TERESA"           474415527
print(bottom_10_bairros) # Exibir os 10 bairros com menor consumo
## # A tibble: 10 × 2
##    BAIRRO          total_consumo_kwh
##    <chr>                       <dbl>
##  1 "MANGUEIRA"              58695797
##  2 "CATUMBI "              160329995
##  3 "ESTACIO "              300749314
##  4 "VASCO DA GAMA"         417832387
##  5 "SAUDE"                 472243171
##  6 "SANTA TERESA"          474415527
##  7 "CAJU "                 524643209
##  8 "SANTO CRISTO"          576404203
##  9 "GAMBOA"                653889949
## 10 "BENFICA "              773436750
# Resumir o consumo total de energia por BAIRRO e MES_REFERENCIA
energia_summary <- energia %>%
  group_by(BAIRRO, MES_REFERENCIA) %>%  # Agrupar os dados por bairro e mês
  summarise(total_consumo_kwh = sum(total_consumo_kwh, na.rm = TRUE)) %>%  # Somar o consumo de energia, ignorando os valores ausentes (NA)
  ungroup()  # Remover o agrupamento após o cálculo da soma

# Criar um objeto com os 10 bairros de maior consumo de energia
top_10_bairros <- energia_summary %>%
  slice_max(total_consumo_kwh, n = 10)  # Selecionar os 10 bairros com maior consumo de energia

# Criar um objeto com os 10 bairros de menor consumo de energia
bottom_10_bairros <- energia_summary %>%
  slice_min(total_consumo_kwh, n = 10)  # Selecionar os 10 bairros com menor consumo de energia

# Visualizar os resultados
print(top_10_bairros)  # Exibir os 10 bairros com maior consumo de energia
## # A tibble: 10 × 3
##    BAIRRO     MES_REFERENCIA total_consumo_kwh
##    <chr>      <date>                     <int>
##  1 CENTRO(RJ) 2013-04-01             221881787
##  2 CENTRO(RJ) 2019-11-01             196018470
##  3 CENTRO(RJ) 2014-02-01             153104158
##  4 CENTRO(RJ) 2011-02-01             146084314
##  5 CENTRO(RJ) 2010-02-01             144171339
##  6 CENTRO(RJ) 2015-03-01             141749876
##  7 CENTRO(RJ) 2014-03-01             140833696
##  8 CENTRO(RJ) 2010-12-01             140690594
##  9 CENTRO(RJ) 2012-03-01             140543755
## 10 CENTRO(RJ) 2015-02-01             140117504
print(bottom_10_bairros)  # Exibir os 10 bairros com menor consumo de energia
## # A tibble: 10 × 3
##    BAIRRO    MES_REFERENCIA total_consumo_kwh
##    <chr>     <date>                     <int>
##  1 MANGUEIRA 2012-09-01                167368
##  2 MANGUEIRA 2012-07-01                257725
##  3 MANGUEIRA 2012-08-01                260411
##  4 MANGUEIRA 2012-06-01                260750
##  5 MANGUEIRA 2011-07-01                272781
##  6 MANGUEIRA 2010-08-01                276669
##  7 MANGUEIRA 2012-05-01                279952
##  8 MANGUEIRA 2010-07-01                281720
##  9 MANGUEIRA 2011-06-01                282476
## 10 MANGUEIRA 2010-06-01                284785
rj = read_census_tract(code_tract = "RJ", year = 2010)
## Using year/date 2010
# Convert to uppercase and remove special characters
rj$name_neighborhood <- rj$name_neighborhood %>%
  toupper() %>%                          # Convert to uppercase
  str_replace_all("[^A-Z0-9 ]", "")    
# Carregar dados de renda por setor censitário
rj1 = read.csv("C:/Users/rodri/OneDrive - Insper/ConsumoEnergiaRJ/Dados/RJ_20231030/Base informaçoes setores2010 universo RJ/CSV/Basico_RJ.csv",
               sep = ";", fileEncoding = 'Latin1')  # Carregar arquivo CSV contendo os dados de renda por setor censitário

# Selecionar apenas as colunas necessárias
rj1 <- rj1 %>% 
  select(Cod_setor, V005)  # Selecionar as colunas Cod_setor (código do setor) e V005 (renda)

# Garantir que a coluna 'Cod_setor' seja do tipo caractere
rj1$Cod_setor = as.character(rj1$Cod_setor)

# Unir os dados de rj1 com outro dataframe rj usando a coluna 'Cod_setor' de rj1 e 'code_tract' de rj
rj2 <- merge(rj, rj1, by.y = "Cod_setor", by.x = "code_tract")  # Realizar a mesclagem dos dados

# Substituir vírgulas por pontos e converter para numérico a coluna 'V005'
rj2$V005 <- gsub(pattern = ",", replacement = ".", x = rj2$V005)  # Substituir vírgula por ponto decimal
rj2$V005 <- as.numeric(rj2$V005)  # Converter a coluna para tipo numérico

# Renomear a coluna 'V005' para 'Renda' e filtrar os dados para o município do Rio de Janeiro
rj2 <- rj2 %>% 
  rename(Renda=V005) %>%  # Renomear coluna para 'Renda'
  filter(name_muni == "Rio De Janeiro")  # Filtrar apenas os dados do município do Rio de Janeiro

summary(rj2$Renda)  # Exibir um resumo estatístico da variável 'Renda'
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   101.1   788.1  1287.6  2136.4  2537.9 28326.4      38
# Calcular os deciséis e criar categorias personalizadas para a renda
rj2 <- rj2 %>%
  filter(!is.na(Renda)) %>%  # Remover linhas onde 'Renda' é NA (valor ausente)
  mutate(
    Quintil = ntile(Renda, 5),  # Dividir a renda em 5 quintis (categorias baseadas nos percentis)
    Renda_Quint = case_when(  # Criar uma nova coluna com categorias de quintil
      Quintil == 1 ~ "0-20%",  # 1º quintil: 0-20%
      Quintil == 2 ~ "20-40%",  # 2º quintil: 20-40%
      Quintil == 3 ~ "40-60%",  # 3º quintil: 40-60%
      Quintil == 4 ~ "60-80%",  # 4º quintil: 60-80%
      Quintil == 5 ~ "80-100%",  # 5º quintil: 80-100%
    )
  )

# Carregar dados dos bairros do Rio de Janeiro
bairros_rj <- read_neighborhood(year = 2010, simplified = FALSE)  # Carregar os dados de bairros do Rio de Janeiro

# Filtrar e selecionar apenas bairros do município do Rio de Janeiro
bairros_rj <- bairros_rj %>% 
  filter(abbrev_state == "RJ") %>%  # Filtrar para o estado do Rio de Janeiro
  filter(name_muni == "Rio De Janeiro") %>%  # Filtrar para o município do Rio de Janeiro
  rename(Bairro = name_neighborhood) %>%  # Renomear a coluna de nome do bairro
  select(Bairro)  # Selecionar apenas a coluna com os nomes dos bairros
# Realizar o "join" espacial entre os dados de renda (rj2) e os bairros (bairros_rj)
rj3 <- st_join(x = rj2, y = bairros_rj)  # Realizar junção espacial, associando dados de renda aos bairros

# Transformar a projeção espacial para o sistema de coordenadas geográficas WGS84 (EPSG:4326)
rj3 <- st_transform(rj3, crs = 4326)  # Garantir que as coordenadas geográficas estejam no formato adequado (latitude e longitude)

# Criar paleta de cores customizada com base nos percentis de renda
breaks <- quantile(rj3$Renda, probs = seq(0, 1, by = 0.125), na.rm = TRUE)  # Calcular os percentis de 0 a 100% para a renda

pal <- colorBin(palette = "YlOrRd", domain = rj3$Renda, bins = breaks)  # Definir uma paleta de cores "YlOrRd" para representar a renda

# Criar mapa interativo com Leaflet
leaflet(data = rj3) %>%
  addTiles() %>%  # Adicionar o mapa base (tiles)
  addPolygons(
    fillColor = ~pal(Renda),  # Preencher as regiões com as cores definidas pela paleta, baseadas na renda
    fillOpacity = 0.9,  # Ajustar a opacidade do preenchimento das áreas
    color = "transparent",  # Remover a linha de borda das áreas (tornando-a transparente)
    weight = 0,  # Definir o peso da linha para 0, removendo a borda visível
    popup = ~paste("Bairro: ", Bairro, "Renda: ", Renda_Quint),  # Exibir informações sobre o bairro e o quintil da renda no popup
    label = ~paste("Bairro: ", Bairro, "Renda: ", Renda)  # Exibir rótulos com o nome do bairro e o valor da renda
  ) %>%
  addLegend(
    pal = pal,  # Adicionar a legenda com a paleta de cores para a renda
    values = rj3$Renda,  # Definir os valores a serem utilizados na legenda (renda)
    title = "Renda",  # Título da legenda
    opacity = 0.95  # Definir a opacidade da legenda
  ) %>%
  setView(lng = -43.1700, lat = -22.9068, zoom = 10)  # Ajustar a visualização do mapa para o Rio de Janeiro
# Agrupar dados por bairro e calcular a renda média e mediana por bairro
rj4 <- rj3 %>%
  st_drop_geometry() %>%  # Remover a geometria espacial (transformando em dados tabulares)
  group_by(Bairro) %>%  # Agrupar os dados pelo nome do bairro
  summarise(
    renda_media = mean(Renda, na.rm = TRUE),  # Calcular a renda média por bairro
    renda_mediana = median(Renda, na.rm = TRUE)  # Calcular a renda mediana por bairro
  )

# Realizar a junção dos dados de renda média com os bairros
bairros_rj2 <- merge(bairros_rj, rj4, by = "Bairro")  # Mesclar dados de renda média com os dados dos bairros

# Criar uma nova paleta de cores com base na renda média dos bairros
pal <- colorBin(palette = "YlOrRd", domain = bairros_rj2$renda_media, bins = 5)  # Definir a paleta de cores com 5 intervalos para a renda média

# Criar mapa interativo com Leaflet para visualizar a renda média por bairro
leaflet(data = bairros_rj2) %>%
  addTiles() %>%  # Adicionar o mapa base (tiles)
  addPolygons(
    fillColor = ~pal(renda_media),  # Preencher as áreas com as cores da paleta, baseadas na renda média
    fillOpacity = 0.9,  # Ajustar a opacidade do preenchimento das áreas
    color = "transparent",  # Remover a borda das áreas (tornando-a transparente)
    weight = 0,  # Definir o peso da borda para 0, removendo a linha visível
    popup = ~paste("Bairro: ", Bairro, "Renda Média: ", renda_media),  # Exibir a renda média de cada bairro no popup
    label = ~paste("Bairro: ", Bairro, "Renda Média: ", renda_media)  # Exibir a renda média nos rótulos dos bairros
  ) %>%
  addLegend(
    pal = pal,  # Adicionar a legenda com a paleta de cores para a renda média
    values = bairros_rj2$renda_media,  # Definir os valores a serem usados na legenda (renda média)
    title = "Renda Média",  # Título da legenda
    opacity = 0.7  # Definir a opacidade da legenda
  ) %>%
  setView(lng = -43.3900, lat = -22.9500, zoom = 10)  # Ajustar a visualização do mapa para o Rio de Janeiro
# Remover espaços extras e padronizar os nomes dos bairros para caixa alta nos dois datasets
energia_summary$BAIRRO <- trimws(toupper(energia_summary$BAIRRO))  # Remover espaços extras e converter para caixa alta
bairros_rj2$Bairro <- toupper(bairros_rj2$Bairro)  # Converter para caixa alta no segundo dataset

# Remover acentos da coluna Bairro em bairros_rj2 para padronização
bairros_rj2 <- bairros_rj2 %>%
  mutate(Bairro = iconv(Bairro, from = "UTF-8", to = "ASCII//TRANSLIT"))  # Remover acentos dos nomes dos bairros

# Ajustar alguns bairros específicos que têm nomes alternativos ou abreviados
bairros_rj2 <- bairros_rj2 %>%
  mutate(Bairro = ifelse(Bairro %in% c("FREGUESIA (ILHA DO GOVERNADOR)", "FREGUESIA (JACAREPAGUA)"), 
                         "FREGUESIA", Bairro)) %>%  # Agrupar bairros com variações no nome (Freguesia)
  group_by(Bairro) %>%  # Agrupar os dados pelo bairro
  summarise(
    renda_media = mean(renda_media, na.rm = TRUE),  # Calcular a média da renda por bairro
    renda_mediana = median(renda_mediana, na.rm = TRUE),  # Calcular a mediana da renda por bairro
    geom = st_union(geom)  # Unir os polígonos (necessário para manter a geometria na operação espacial)
  )

# Criar um dicionário de correção para os bairros
correcao_bairros <- c(
  "BENFICA " = "BENFICA",
  "CAJU " = "CAJU",
  "CATUMBI " = "CATUMBI",
  "CENTRO(RJ)" = "CENTRO",
  "CIDADE NOVA " = "CIDADE NOVA",
  "ESTACIO " = "ESTÁCIO",
  "FREGUESIA " = "FREGUESIA",
  "RIO COMPRIDO" = "RIO COMPRIDO",
  "MANGUEIRA" = "MANGUEIRA",
  "GAMBOA" = "GAMBOA",
  "SANTA TERESA" = "SANTA TERESA",
  "SANTO CRISTO" = "SANTO CRISTO",
  "SAO CRISTOVAO " = "SÃO CRISTÓVÃO",
  "SAUDE" = "SAUDE",
  "VASCO DA GAMA" = "VASCO DA GAMA"
)

# Aplicar as correções usando a função recode
energia_summary <- energia_summary %>%
  mutate(BAIRRO = recode(BAIRRO, !!!correcao_bairros)) %>%  # Corrigir os nomes dos bairros conforme o dicionário
  mutate(BAIRRO = iconv(BAIRRO, from = "UTF-8", to = "ASCII//TRANSLIT"))  # Remover acentos da coluna BAIRRO

# Verificar se existem bairros que não estão correspondendo entre os dois datasets
bairros_nao_correspondentes <- setdiff(energia_summary$BAIRRO, bairros_rj2$Bairro)  # Encontrar bairros não correspondentes

print(bairros_nao_correspondentes)  # Exibir os bairros que não coincidem entre os dois datasets
## character(0)
# Realizar a junção entre os datasets de energia e os bairros corrigidos
energia_bairros <- merge(bairros_rj2, energia_summary, by.x = "Bairro", by.y = "BAIRRO")  # Merge entre os datasets

# Filtrar os dados para remover o bairro "FREGUESIA", caso não seja relevante para a análise
energia_bairros <- energia_bairros %>% 
  filter(Bairro != "FREGUESIA")  # Filtrar para não incluir o bairro Freguesia

# Criar uma paleta de cores customizada com base nos percentis de consumo de energia
breaks <- quantile(energia_bairros$total_consumo_kwh, probs = seq(0, 1, by = 0.125), na.rm = TRUE)  # Calcular os percentis de consumo de energia
pal <- colorBin(palette = "Reds", domain = energia_bairros$total_consumo_kwh, bins = breaks)  # Definir a paleta de cores "Reds" para o consumo de energia

# Criar um mapa interativo com Leaflet para visualizar o consumo de energia por bairro
leaflet(data = energia_bairros) %>%
  addTiles() %>%  # Adicionar o mapa base (tiles)
  addPolygons(
    fillColor = ~pal(total_consumo_kwh),  # Preencher os bairros com cores baseadas no consumo de energia
    fillOpacity = 0.9,  # Ajustar a opacidade do preenchimento
    color = "transparent",  # Remover a borda dos polígonos
    weight = 0,  # Definir o peso da borda para 0, removendo a linha visível
    popup = ~paste("Bairro: ", Bairro, "total_consumo_kwh: ", total_consumo_kwh),  # Exibir o nome do bairro e o consumo de energia no popup
    label = ~paste("Bairro: ", Bairro, "total_consumo_kwh: ", total_consumo_kwh)  # Exibir o nome do bairro e o consumo de energia no rótulo
  ) %>%
  addLegend(
    pal = pal,  # Adicionar legenda com a paleta de cores
    values = energia_bairros$total_consumo_kwh,  # Definir os valores para a legenda
    title = "total_consumo_kwh",  # Título da legenda
    opacity = 0.5  # Ajustar a opacidade da legenda
  ) %>%
  setView(lng = -43.1650, lat = -22.9100, zoom = 12)  # Ajustar a visualização do mapa para o Rio de Janeiro
# Criar um gráfico com ggplot para mostrar o consumo de energia por bairro
ggplot() +
  geom_sf(data = energia_bairros, aes(fill = total_consumo_kwh), color = NA) +  # Plotar os bairros com o consumo de energia
  scale_fill_viridis_c() +  # Usar a paleta de cores "viridis" para o gráfico
  theme_void()  # Remover o fundo do gráfico